using System;
using System.Collections.Generic;
using System.Text;

namespace Studio.Windows
{
    public class Constants
    {

        #region SWP : SetWindowPos

        public const int HWND_TOP = 0;
        public const int HWND_BOTTOM = 1;
        public const int HWND_TOPMOST = -1;
        public const int HWND_NOTOPMOST = -2;


        public const int SWP_ASYNCWINDOWPOS = 0x4000;
        public const int SWP_DEFERERASE = 0x2000;
        public const int SWP_DRAWFRAME = 0x0020;
        public const int SWP_FRAMECHANGED = 0x0020;
        public const int SWP_HIDEWINDOW = 0x0080;
        public const int SWP_NOACTIVATE = 0x0010;
        public const int SWP_NOCOPYBITS = 0x0100;
        public const int SWP_NOMOVE = 0x0002;
        public const int SWP_NOOWNERZORDER = 0x0200;
        public const int SWP_NOREDRAW = 0x0008;
        public const int SWP_NOREPOSITION = 0x0200;
        public const int SWP_NOSENDCHANGING = 0x0400;
        public const int SWP_NOSIZE = 0x0001;
        public const int SWP_NOZORDER = 0x0004;
        public const int SWP_SHOWWINDOW = 0x0040;

        #endregion

        #region WS: Windows Style


        public const int WS_OVERLAPPED = 0x00000000;
        public const long WS_POPUP = 0x80000000;
        public const int WS_CHILD = 0x40000000;
        public const int WS_MINIMIZE = 0x20000000;
        public const int WS_VISIBLE = 0x10000000;
        public const int WS_DISABLED = 0x08000000;
        public const int WS_CLIPSIBLINGS = 0x04000000;
        public const int WS_CLIPCHILDREN = 0x02000000;
        public const int WS_MAXIMIZE = 0x01000000;
        public const int WS_CAPTION = 0x00C00000;     /* WS_BORDER | WS_DLGFRAME  */
        public const int WS_BORDER = 0x00800000;
        public const int WS_DLGFRAME = 0x00400000;
        public const int WS_VSCROLL = 0x00200000;
        public const int WS_HSCROLL = 0x00100000;
        public const int WS_SYSMENU = 0x00080000;
        public const int WS_THICKFRAME = 0x00040000;
        public const int WS_GROUP = 0x00020000;
        public const int WS_TABSTOP = 0x00010000;

        public const int WS_MINIMIZEBOX = 0x00020000;
        public const int WS_MAXIMIZEBOX = 0x00010000;


        public const int WS_TILED = WS_OVERLAPPED;
        public const int WS_ICONIC = WS_MINIMIZE;
        public const int WS_SIZEBOX = WS_THICKFRAME;
        public const int WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW;

        /*
         * Common Window Styles
         */
        public const int WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED |
                                                 WS_CAPTION |
                                                 WS_SYSMENU |
                                                 WS_THICKFRAME |
                                                 WS_MINIMIZEBOX |
                                                 WS_MAXIMIZEBOX);

        public const long WS_POPUPWINDOW = (WS_POPUP | WS_BORDER | WS_SYSMENU);

        public const int WS_CHILDWINDOW = (WS_CHILD);


        /*
         * Extended Window Styles
         */
        public const int WS_EX_DLGMODALFRAME = 0x00000001;
        public const int WS_EX_NOPARENTNOTIFY = 0x00000004;
        public const int WS_EX_TOPMOST = 0x00000008;
        public const int WS_EX_ACCEPTFILES = 0x00000010;
        public const int WS_EX_TRANSPARENT = 0x00000020;


        // WINVER > 4.0
        public const int WS_EX_MDICHILD = 0x00000040;
        public const int WS_EX_TOOLWINDOW = 0x00000080;
        public const int WS_EX_WINDOWEDGE = 0x00000100;
        public const int WS_EX_CLIENTEDGE = 0x00000200;
        public const int WS_EX_CONTEXTHELP = 0x00000400;

        public const int WS_EX_RIGHT = 0x00001000;
        public const int WS_EX_LEFT = 0x00000000;
        public const int WS_EX_RTLREADING = 0x00002000;
        public const int WS_EX_LTRREADING = 0x00000000;
        public const int WS_EX_LEFTSCROLLBAR = 0x00004000;
        public const int WS_EX_RIGHTSCROLLBAR = 0x00000000;

        public const int WS_EX_CONTROLPARENT = 0x00010000;
        public const int WS_EX_STATICEDGE = 0x00020000;
        public const int WS_EX_APPWINDOW = 0x00040000;


        public const int WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE);
        public const int WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST);

        // winver >= 5.0
        public const int WS_EX_LAYERED = 0x00080000;

        public const int WS_EX_NOINHERITLAYOUT = 0x00100000; // Disable inheritence of mirroring by children
        public const int WS_EX_LAYOUTRTL = 0x00400000; // Right to left mirroring

        public const int WS_EX_NOACTIVATE = 0x08000000;

        // WINVER >= 5.01
        public const int WS_EX_COMPOSITED = 0x02000000;

        #endregion

        #region GWL: GetWindowLong

        public static int GWL_WNDPROC = -4;
        public static int GWL_HINSTANCE = -6;
        public static int GWL_HWNDPARENT = -8;
        public static int GWL_STYLE = -16;
        public static int GWL_EXSTYLE = -20;
        public static int GWL_USERDATA = -21;
        public static int GWL_ID = -12;

        #endregion

        #region MB: MessageBox Flags

        public static int MB_OK = 0x00000000;
        public static int MB_OKCANCEL = 0x00000001;
        public static int MB_ABORTRETRYIGNORE = 0x00000002;
        public static int MB_YESNOCANCEL = 0x00000003;
        public static int MB_YESNO = 0x00000004;
        public static int MB_RETRYCANCEL = 0x00000005;
        public static int MB_CANCELTRYCONTINUE = 0x00000006;

        public static int MB_ICONHAND = 0x00000010;
        public static int MB_ICONQUESTION = 0x00000020;
        public static int MB_ICONEXCLAMATION = 0x00000030;
        public static int MB_ICONASTERISK = 0x00000040;

        public static int MB_USERICON = 0x00000080;
        public static int MB_ICONWARNING = MB_ICONEXCLAMATION;
        public static int MB_ICONERROR = MB_ICONHAND;

        public static int MB_ICONINFORMATION = MB_ICONASTERISK;
        public static int MB_ICONSTOP = MB_ICONHAND;

        public static int MB_DEFBUTTON1 = 0x00000000;
        public static int MB_DEFBUTTON2 = 0x00000100;
        public static int MB_DEFBUTTON3 = 0x00000200;
        public static int MB_DEFBUTTON4 = 0x00000300;

        public static int MB_APPLMODAL = 0x00000000;
        public static int MB_SYSTEMMODAL = 0x00001000;
        public static int MB_TASKMODAL = 0x00002000;
        public static int MB_HELP = 0x00004000; // Help Button

        public static int MB_NOFOCUS = 0x00008000;
        public static int MB_SETFOREGROUND = 0x00010000;
        public static int MB_DEFAULT_DESKTOP_ONLY = 0x00020000;

        public static int MB_TOPMOST = 0x00040000;
        public static int MB_RIGHT = 0x00080000;
        public static int MB_RTLREADING = 0x00100000;



        public static int MB_SERVICE_NOTIFICATION = 0x00200000;
        public static int MB_SERVICE_NOTIFICATION_NT3X = 0x00040000;

        public static int MB_TYPEMASK = 0x0000000F;
        public static int MB_ICONMASK = 0x000000F0;
        public static int MB_DEFMASK = 0x00000F00;
        public static int MB_MODEMASK = 0x00003000;
        public static int MB_MISCMASK = 0x0000C000;

        #endregion

        #region ID: Dialog Box Command IDs
        public static int IDOK = 1;
        public static int IDCANCEL = 2;
        public static int IDABORT = 3;
        public static int IDRETRY = 4;
        public static int IDIGNORE = 5;
        public static int IDYES = 6;
        public static int IDNO = 7;
        public static int IDCLOSE = 8;
        public static int IDHELP = 9;
        public static int IDTRYAGAIN = 10;
        public static int IDCONTINUE = 11;
        public static int IDTIMEOUT = 32000;
        #endregion

        #region WM: Window Messages


        /*
         * Window Messages
         */

        public static int WM_NULL = 0x0000;
        public static int WM_CREATE = 0x0001;
        public static int WM_DESTROY = 0x0002;
        public static int WM_MOVE = 0x0003;
        public static int WM_SIZE = 0x0005;

        public static int WM_ACTIVATE = 0x0006;

        public static int WM_SETFOCUS = 0x0007;
        public static int WM_KILLFOCUS = 0x0008;
        public static int WM_ENABLE = 0x000A;
        public static int WM_SETREDRAW = 0x000B;
        public static int WM_SETTEXT = 0x000C;
        public static int WM_GETTEXT = 0x000D;
        public static int WM_GETTEXTLENGTH = 0x000E;
        public static int WM_PAINT = 0x000F;
        public static int WM_CLOSE = 0x0010;
        // #ifndef _WIN32_WCE
        public static int WM_QUERYENDSESSION = 0x0011;
        public static int WM_QUERYOPEN = 0x0013;
        public static int WM_ENDSESSION = 0x0016;
        // #endif
        public static int WM_QUIT = 0x0012;
        public static int WM_ERASEBKGND = 0x0014;
        public static int WM_SYSCOLORCHANGE = 0x0015;
        public static int WM_SHOWWINDOW = 0x0018;
        public static int WM_WININICHANGE = 0x001A;
        // #if(WINVER >= 0x0400)
        public static int WM_SETTINGCHANGE = WM_WININICHANGE;
        // #endif /* WINVER >= 0x0400 */


        public static int WM_DEVMODECHANGE = 0x001B;
        public static int WM_ACTIVATEAPP = 0x001C;
        public static int WM_FONTCHANGE = 0x001D;
        public static int WM_TIMECHANGE = 0x001E;
        public static int WM_CANCELMODE = 0x001F;
        public static int WM_SETCURSOR = 0x0020;
        public static int WM_MOUSEACTIVATE = 0x0021;
        public static int WM_CHILDACTIVATE = 0x0022;
        public static int WM_QUEUESYNC = 0x0023;

        public static int WM_GETMINMAXINFO = 0x0024;

        public static int WM_PAINTICON = 0x0026;
        public static int WM_ICONERASEBKGND = 0x0027;
        public static int WM_NEXTDLGCTL = 0x0028;
        public static int WM_SPOOLERSTATUS = 0x002A;
        public static int WM_DRAWITEM = 0x002B;
        public static int WM_MEASUREITEM = 0x002C;
        public static int WM_DELETEITEM = 0x002D;
        public static int WM_VKEYTOITEM = 0x002E;
        public static int WM_CHARTOITEM = 0x002F;
        public static int WM_SETFONT = 0x0030;
        public static int WM_GETFONT = 0x0031;
        public static int WM_SETHOTKEY = 0x0032;
        public static int WM_GETHOTKEY = 0x0033;
        public static int WM_QUERYDRAGICON = 0x0037;
        public static int WM_COMPAREITEM = 0x0039;
        // #if(WINVER >= 0x0500)
        // #ifndef _WIN32_WCE
        public static int WM_GETOBJECT = 0x003D;
        // #endif
        // #endif /* WINVER >= 0x0500 */
        public static int WM_COMPACTING = 0x0041;
        public static int WM_COMMNOTIFY = 0x0044;  /* no longer suported */
        public static int WM_WINDOWPOSCHANGING = 0x0046;
        public static int WM_WINDOWPOSCHANGED = 0x0047;

        public static int WM_POWER = 0x0048;
        public static int WM_COPYDATA = 0x004A;
        public static int WM_CANCELJOURNAL = 0x004B;

        // #if(WINVER >= 0x0400)
        public static int WM_NOTIFY = 0x004E;
        public static int WM_INPUTLANGCHANGEREQUEST = 0x0050;
        public static int WM_INPUTLANGCHANGE = 0x0051;
        public static int WM_TCARD = 0x0052;
        public static int WM_HELP = 0x0053;
        public static int WM_USERCHANGED = 0x0054;
        public static int WM_NOTIFYFORMAT = 0x0055;

        public static int WM_CONTEXTMENU = 0x007B;
        public static int WM_STYLECHANGING = 0x007C;
        public static int WM_STYLECHANGED = 0x007D;
        public static int WM_DISPLAYCHANGE = 0x007E;
        public static int WM_GETICON = 0x007F;
        public static int WM_SETICON = 0x0080;
        // #endif /* WINVER >= 0x0400 */

        public static int WM_NCCREATE = 0x0081;
        public static int WM_NCDESTROY = 0x0082;
        public static int WM_NCCALCSIZE = 0x0083;
        public static int WM_NCHITTEST = 0x0084;
        public static int WM_NCPAINT = 0x0085;
        public static int WM_NCACTIVATE = 0x0086;
        public static int WM_GETDLGCODE = 0x0087;
        // #ifndef _WIN32_WCE
        public static int WM_SYNCPAINT = 0x0088;
        // #endif
        public static int WM_NCMOUSEMOVE = 0x00A0;
        public static int WM_NCLBUTTONDOWN = 0x00A1;
        public static int WM_NCLBUTTONUP = 0x00A2;
        public static int WM_NCLBUTTONDBLCLK = 0x00A3;
        public static int WM_NCRBUTTONDOWN = 0x00A4;
        public static int WM_NCRBUTTONUP = 0x00A5;
        public static int WM_NCRBUTTONDBLCLK = 0x00A6;
        public static int WM_NCMBUTTONDOWN = 0x00A7;
        public static int WM_NCMBUTTONUP = 0x00A8;
        public static int WM_NCMBUTTONDBLCLK = 0x00A9;



        // #if(_WIN32_WINNT >= 0x0500)
        public static int WM_NCXBUTTONDOWN = 0x00AB;
        public static int WM_NCXBUTTONUP = 0x00AC;
        public static int WM_NCXBUTTONDBLCLK = 0x00AD;
        // #endif /* _WIN32_WINNT >= 0x0500 */


        // #if(_WIN32_WINNT >= 0x0501)
        public static int WM_INPUT = 0x00FF;
        // #endif /* _WIN32_WINNT >= 0x0501 */

        public static int WM_KEYFIRST = 0x0100;
        public static int WM_KEYDOWN = 0x0100;
        public static int WM_KEYUP = 0x0101;
        public static int WM_CHAR = 0x0102;
        public static int WM_DEADCHAR = 0x0103;
        public static int WM_SYSKEYDOWN = 0x0104;
        public static int WM_SYSKEYUP = 0x0105;
        public static int WM_SYSCHAR = 0x0106;
        public static int WM_SYSDEADCHAR = 0x0107;
        // #if(_WIN32_WINNT >= 0x0501)
        public static int WM_UNICHAR = 0x0109;
        public static int WM_KEYLAST = 0x0109;
        public static int UNICODE_NOCHAR = 0xFFFF;
        // #else
        // public static int WM_KEYLAST = 0x0108;
        // #endif /* _WIN32_WINNT >= 0x0501 */

        // #if(WINVER >= 0x0400)
        public static int WM_IME_STARTCOMPOSITION = 0x010D;
        public static int WM_IME_ENDCOMPOSITION = 0x010E;
        public static int WM_IME_COMPOSITION = 0x010F;
        public static int WM_IME_KEYLAST = 0x010F;
        // #endif /* WINVER >= 0x0400 */

        public static int WM_INITDIALOG = 0x0110;
        public static int WM_COMMAND = 0x0111;
        public static int WM_SYSCOMMAND = 0x0112;
        public static int WM_TIMER = 0x0113;
        public static int WM_HSCROLL = 0x0114;
        public static int WM_VSCROLL = 0x0115;
        public static int WM_INITMENU = 0x0116;
        public static int WM_INITMENUPOPUP = 0x0117;
        public static int WM_MENUSELECT = 0x011F;
        public static int WM_MENUCHAR = 0x0120;
        public static int WM_ENTERIDLE = 0x0121;
        // #if(WINVER >= 0x0500)
        // #ifndef _WIN32_WCE
        public static int WM_MENURBUTTONUP = 0x0122;
        public static int WM_MENUDRAG = 0x0123;
        public static int WM_MENUGETOBJECT = 0x0124;
        public static int WM_UNINITMENUPOPUP = 0x0125;
        public static int WM_MENUCOMMAND = 0x0126;

        // #ifndef _WIN32_WCE
        // #if(_WIN32_WINNT >= 0x0500)
        public static int WM_CHANGEUISTATE = 0x0127;
        public static int WM_UPDATEUISTATE = 0x0128;
        public static int WM_QUERYUISTATE = 0x0129;

        // #endif
        // #endif /* WINVER >= 0x0500 */

        public static int WM_CTLCOLORMSGBOX = 0x0132;
        public static int WM_CTLCOLOREDIT = 0x0133;
        public static int WM_CTLCOLORLISTBOX = 0x0134;
        public static int WM_CTLCOLORBTN = 0x0135;
        public static int WM_CTLCOLORDLG = 0x0136;
        public static int WM_CTLCOLORSCROLLBAR = 0x0137;
        public static int WM_CTLCOLORSTATIC = 0x0138;
        public static int MN_GETHMENU = 0x01E1;

        public static int WM_MOUSEFIRST = 0x0200;
        public static int WM_MOUSEMOVE = 0x0200;
        public static int WM_LBUTTONDOWN = 0x0201;
        public static int WM_LBUTTONUP = 0x0202;
        public static int WM_LBUTTONDBLCLK = 0x0203;
        public static int WM_RBUTTONDOWN = 0x0204;
        public static int WM_RBUTTONUP = 0x0205;
        public static int WM_RBUTTONDBLCLK = 0x0206;
        public static int WM_MBUTTONDOWN = 0x0207;
        public static int WM_MBUTTONUP = 0x0208;
        public static int WM_MBUTTONDBLCLK = 0x0209;
        // #if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
        public static int WM_MOUSEWHEEL = 0x020A;
        // #endif
        // #if (_WIN32_WINNT >= 0x0500)
        public static int WM_XBUTTONDOWN = 0x020B;
        public static int WM_XBUTTONUP = 0x020C;
        public static int WM_XBUTTONDBLCLK = 0x020D;
        // #endif
        // #if (_WIN32_WINNT >= 0x0500)
        public static int WM_MOUSELAST = 0x020D;
        // #else if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
        // public static int WM_MOUSELAST = 0x020A;
        // #else
        // public static int WM_MOUSELAST = 0x0209;
        // #endif /* (_WIN32_WINNT >= 0x0500) */

        // #endif /* _WIN32_WINNT >= 0x0400 */

        /* Were there to be an XBUTTON3, its value would be 0x0004 */
        // #endif /* _WIN32_WINNT >= 0x0500 */

        public static int WM_PARENTNOTIFY = 0x0210;
        public static int WM_ENTERMENULOOP = 0x0211;
        public static int WM_EXITMENULOOP = 0x0212;

        // #if(WINVER >= 0x0400)
        public static int WM_NEXTMENU = 0x0213;
        public static int WM_SIZING = 0x0214;
        public static int WM_CAPTURECHANGED = 0x0215;
        public static int WM_MOVING = 0x0216;
        // #endif /* WINVER >= 0x0400 */

        // #if(WINVER >= 0x0400)


        public static int WM_POWERBROADCAST = 0x0218;

        // #endif /* WINVER >= 0x0400 */

        // #if(WINVER >= 0x0400)
        public static int WM_DEVICECHANGE = 0x0219;
        // #endif /* WINVER >= 0x0400 */

        public static int WM_MDICREATE = 0x0220;
        public static int WM_MDIDESTROY = 0x0221;
        public static int WM_MDIACTIVATE = 0x0222;
        public static int WM_MDIRESTORE = 0x0223;
        public static int WM_MDINEXT = 0x0224;
        public static int WM_MDIMAXIMIZE = 0x0225;
        public static int WM_MDITILE = 0x0226;
        public static int WM_MDICASCADE = 0x0227;
        public static int WM_MDIICONARRANGE = 0x0228;
        public static int WM_MDIGETACTIVE = 0x0229;


        public static int WM_MDISETMENU = 0x0230;
        public static int WM_ENTERSIZEMOVE = 0x0231;
        public static int WM_EXITSIZEMOVE = 0x0232;
        public static int WM_DROPFILES = 0x0233;
        public static int WM_MDIREFRESHMENU = 0x0234;


        // #if(WINVER >= 0x0400)
        public static int WM_IME_SETCONTEXT = 0x0281;
        public static int WM_IME_NOTIFY = 0x0282;
        public static int WM_IME_CONTROL = 0x0283;
        public static int WM_IME_COMPOSITIONFULL = 0x0284;
        public static int WM_IME_SELECT = 0x0285;
        public static int WM_IME_CHAR = 0x0286;
        // #endif /* WINVER >= 0x0400 */
        // #if(WINVER >= 0x0500)
        public static int WM_IME_REQUEST = 0x0288;
        // #endif /* WINVER >= 0x0500 */
        // #if(WINVER >= 0x0400)
        public static int WM_IME_KEYDOWN = 0x0290;
        public static int WM_IME_KEYUP = 0x0291;
        // #endif /* WINVER >= 0x0400 */

        // #if((_WIN32_WINNT >= 0x0400) || (WINVER >= 0x0500))
        public static int WM_MOUSEHOVER = 0x02A1;
        public static int WM_MOUSELEAVE = 0x02A3;
        // #endif
        // #if(WINVER >= 0x0500)
        public static int WM_NCMOUSEHOVER = 0x02A0;
        public static int WM_NCMOUSELEAVE = 0x02A2;
        // #endif /* WINVER >= 0x0500 */

        // #if(_WIN32_WINNT >= 0x0501)
        public static int WM_WTSSESSION_CHANGE = 0x02B1;

        public static int WM_TABLET_FIRST = 0x02c0;
        public static int WM_TABLET_LAST = 0x02df;
        // #endif /* _WIN32_WINNT >= 0x0501 */

        public static int WM_CUT = 0x0300;
        public static int WM_COPY = 0x0301;
        public static int WM_PASTE = 0x0302;
        public static int WM_CLEAR = 0x0303;
        public static int WM_UNDO = 0x0304;
        public static int WM_RENDERFORMAT = 0x0305;
        public static int WM_RENDERALLFORMATS = 0x0306;
        public static int WM_DESTROYCLIPBOARD = 0x0307;
        public static int WM_DRAWCLIPBOARD = 0x0308;
        public static int WM_PAINTCLIPBOARD = 0x0309;
        public static int WM_VSCROLLCLIPBOARD = 0x030A;
        public static int WM_SIZECLIPBOARD = 0x030B;
        public static int WM_ASKCBFORMATNAME = 0x030C;
        public static int WM_CHANGECBCHAIN = 0x030D;
        public static int WM_HSCROLLCLIPBOARD = 0x030E;
        public static int WM_QUERYNEWPALETTE = 0x030F;
        public static int WM_PALETTEISCHANGING = 0x0310;
        public static int WM_PALETTECHANGED = 0x0311;
        public static int WM_HOTKEY = 0x0312;

        // #if(WINVER >= 0x0400)
        public static int WM_PRINT = 0x0317;
        public static int WM_PRINTCLIENT = 0x0318;
        // #endif /* WINVER >= 0x0400 */

        // #if(_WIN32_WINNT >= 0x0500)
        public static int WM_APPCOMMAND = 0x0319;
        // #endif /* _WIN32_WINNT >= 0x0500 */

        // #if(_WIN32_WINNT >= 0x0501)
        public static int WM_THEMECHANGED = 0x031A;
        // #endif /* _WIN32_WINNT >= 0x0501 */


        // #if(WINVER >= 0x0400)

        public static int WM_HANDHELDFIRST = 0x0358;
        public static int WM_HANDHELDLAST = 0x035F;

        public static int WM_AFXFIRST = 0x0360;
        public static int WM_AFXLAST = 0x037F;
        // #endif /* WINVER >= 0x0400 */

        public static int WM_PENWINFIRST = 0x0380;
        public static int WM_PENWINLAST = 0x038F;


        // #if(WINVER >= 0x0400)
        public static int WM_APP = 0x8000;
        // #endif /* WINVER >= 0x0400 */


        /*
         * NOTE: All Message Numbers below 0x0400 are RESERVED.
         *
         * Private Window Messages Start Here:
         */
        public static int WM_USER = 0x0400;



        #endregion

        #region RDW: RedrawWindow Flags
        /*
        * RedrawWindow() flags
        */
        public const uint RDW_INVALIDATE = 0x0001;
        public const uint RDW_INTERNALPAINT = 0x0002;
        public const uint RDW_ERASE = 0x0004;

        public const uint RDW_VALIDATE = 0x0008;
        public const uint RDW_NOINTERNALPAINT = 0x0010;
        public const uint RDW_NOERASE = 0x0020;

        public const uint RDW_NOCHILDREN = 0x0040;
        public const uint RDW_ALLCHILDREN = 0x0080;

        public const uint RDW_UPDATENOW = 0x0100;
        public const uint RDW_ERASENOW = 0x0200;

        public const uint RDW_FRAME = 0x0400;
        public const uint RDW_NOFRAME = 0x0800;

        #endregion

        #region Raster Operations

        /* Ternary raster operations */
        public const uint SRCCOPY = 0x00CC0020; /* dest = source                   */
        public const uint SRCPAINT = 0x00EE0086; /* dest = source OR dest           */
        public const uint SRCAND = 0x008800C6; /* dest = source AND dest          */
        public const uint SRCINVERT = 0x00660046; /* dest = source XOR dest          */
        public const uint SRCERASE = 0x00440328; /* dest = source AND (NOT dest )   */
        public const uint NOTSRCCOPY = 0x00330008; /* dest = (NOT source)             */
        public const uint NOTSRCERASE = 0x001100A6; /* dest = (NOT src) AND (NOT dest) */
        public const uint MERGECOPY = 0x00C000CA; /* dest = (source AND pattern)     */
        public const uint MERGEPAINT = 0x00BB0226; /* dest = (NOT source) OR dest     */
        public const uint PATCOPY = 0x00F00021; /* dest = pattern                  */
        public const uint PATPAINT = 0x00FB0A09; /* dest = DPSnoo                   */
        public const uint PATINVERT = 0x005A0049; /* dest = pattern XOR dest         */
        public const uint DSTINVERT = 0x00550009; /* dest = (NOT dest)               */
        public const uint BLACKNESS = 0x00000042; /* dest = BLACK                    */
        public const uint WHITENESS = 0x00FF0062; /* dest = WHITE                    */
        // #if(WINVER >= 0x0500)

        public const uint NOMIRRORBITMAP = 0x80000000; /* Do not Mirror the bitmap in this call */
        public const uint CAPTUREBLT = 0x40000000; /* Include layered windows */
        // #endif /* WINVER >= 0x0500 */

        #endregion

        #region mouse_event Constants

        public const uint MOUSEEVENTF_MOVE = 0x0001; /* mouse move */
        public const uint MOUSEEVENTF_LEFTDOWN = 0x0002; /* left button down */
        public const uint MOUSEEVENTF_LEFTUP = 0x0004; /* left button up */
        public const uint MOUSEEVENTF_RIGHTDOWN = 0x0008; /* right button down */
        public const uint MOUSEEVENTF_RIGHTUP = 0x0010; /* right button up */
        public const uint MOUSEEVENTF_MIDDLEDOWN = 0x0020; /* middle button down */
        public const uint MOUSEEVENTF_MIDDLEUP = 0x0040; /* middle button up */
        public const uint MOUSEEVENTF_XDOWN = 0x0080; /* x button down */
        public const uint MOUSEEVENTF_XUP = 0x0100; /* x button down */
        public const uint MOUSEEVENTF_WHEEL = 0x0800; /* wheel button rolled */
        public const uint MOUSEEVENTF_VIRTUALDESK = 0x4000; /* map to entire virtual desktop */
        public const uint MOUSEEVENTF_ABSOLUTE = 0x8000; /* absolute move */

        #endregion

        #region Change Display Settings

        public const int ENUM_CURRENT_SETTINGS = -1;

        public const int CDS_UPDATEREGISTRY = 0x00000001;
        public const int CDS_TEST = 0x00000002;
        public const int CDS_FULLSCREEN = 0x00000004;
        public const int CDS_GLOBAL = 0x00000008;
        public const int CDS_SET_PRIMARY = 0x00000010;
        public const int CDS_RESET = 0x40000000;
        public const int CDS_SETRECT = 0x20000000;
        public const int CDS_NORESET = 0x10000000;

        public const int DM_BITSPERPEL = 0x40000;
        public const int DM_PELSWIDTH = 0x80000;
        public const int DM_PELSHEIGHT = 0x100000;

        public const int DISP_CHANGE_SUCCESSFUL = 0;
        public const int DISP_CHANGE_RESTART = 1;
        public const int DISP_CHANGE_FAILED = -1;

        // WinAPI.OpenInputDesktop
        public const int MAXIMUM_ALLOWED = 0x02000000;


        #endregion


        public const int LOGON32_LOGON_INTERACTIVE = 2;

        public const int LOGON32_PROVIDER_DEFAULT = 0;

    }
}
